<?php 

// +----------------------------  地址相关控制器 ------------------------------------------

namespace app\controller;

use app\BaseController;
use app\dto\R;
use app\model\UserAddress;
use think\facade\Request;

class AddressController extends BaseController{

    // 编辑收货地址：先删除原有地址，再添加新的地址
    public function editAddress($id, $userId){
        // 接收参数：用户ID，地址ID和收货地址信息
        $data = Request::put();
        $data['user_id'] = $userId;

        // 删除原有地址
        UserAddress::where('id', $id)->delete();

        // 添加新的地址，调用UserController 中的 addAddress方法
        $addressData = [
            'user_id' => $data['user_id'], 
            'user_name' => $data['name'],
            'tel_number' => $data['phone'],
            'postal_code' => $data['zipCode'],
            'province_name' => $data['province'],
            'city_name' => $data['city'],
            'county_name' => $data['area'],
            'detail_info' => $data['address'],
            'default_address' => isset($data['isDefault']) ? ($data['isDefault'] ? 1 : 0) : 0 // 转换布尔值为整数
        ];
        $address = new UserAddress($addressData);
        // 保存地址到数据库
        // 查看是否要将该地址设置为默认地址
        $isDefault = isset($data['isDefault']) ? $data['isDefault'] : 0; // 是否默认地址，默认为0
        
        // 如果要设置为默认地址，将数据库中的默认地址设置为0
        if ($isDefault) {
            // 先将所有该用户的默认地址设置为非默认
            UserAddress::where('user_id', $addressData['user_id'])
                ->where('default_address', 1)
                ->update(['default_address' => 0]);
        }
        
        // 创建收货地址记录
        if ($address->save()) {
            return json(R::ok('收货地址更新成功'));
        } else {
            return json(R::error('收货地址更新失败'));
        }
    }

    // 将地址更改为默认，根据id字段
    public function setDefaultAddress($id, $userId){
        UserAddress::where('user_id', $userId)->update(['default_address' => 0]);
        UserAddress::where('id', $id)->update(['default_address' => 1]);
        return json(R::ok("设置默认地址成功"));
    }

    // 根据id删除收货地址
    public function deleteAddress($id){
        UserAddress::where('id', $id)->delete();
        return json(R::ok("删除收货地址成功"));
    }
}

